/*
 * ==================================================
 * 项目开发者：JerryStark
 * 开发者Email：4771007@qq.com
 * 开发者QQ:4771007
 * 开发范围：web，wap，android,ios,osx or win or linux 应用
 * ==================================================
 */
package RTGame.GetGames;

import RTGame.Configs.Load;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 抓取游戏结果主类
 * <br>开启抓取
 * <br>关闭抓取
 * <br>抓取部分主要是看lottery中有几个游戏配置文件,
 * <br>一个主线程,定时循环配置文件,<br>
 * 也就是每次循环主线程,将建立对应数量的抓取线程一次. 死了就死了.
 *
 * @author jerry
 */
public class GameManage {

    /**
     * 抓取的主线程
     */
    public Thread MagageThread;

    /**
     * 抓取的主线程开关
     * <br>默认关闭,start 才重置为true
     */
    public boolean ManageStatus = false;

    /**
     * 初始化配置
     */
    public GameManage() {

    }

    /**
     * 开启抓取
     * <br>每次执行都.启动主线程,并重置开关
     */
    public void Start() {
        System.out.println("开启抓取线程......");
        ManageStatus = true;
        MagageThread = new Thread(() -> {
            while (ManageStatus) {
                ForAllGames();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    System.err.println("主线程循环出错");
                }
            }

        });
        MagageThread.setName("GetGameManage");
        MagageThread.start();
    }

    /**
     * 关闭抓取
     */
    public void Stop() {

    }

    /**
     * 开始一次循环抓取配置读取
     * <br>循环一次所有配置文件夹的配置文件
     */
    private void ForAllGames() {
        Set<Map.Entry<String, JsonElement>> sets = Load.LotteryConfig.entrySet();
        if (sets.isEmpty()) {
            System.err.println("没有发现任何的游戏配置文件.");
            return;
        }
//循环配置json对象
        Iterator<Map.Entry<String, JsonElement>> ite = sets.iterator();

        //开始循环
        while (ite.hasNext()) {
            Map.Entry<String, JsonElement> next = ite.next();
            //获得单个游戏抓取配置文件
            String key = next.getKey();
            JsonObject value = (JsonObject) next.getValue();

            //如果状态是关闭就不执行抓取了
            if (!value.get("status").getAsString().equals("start")) {
                System.out.println(value.get("name").getAsString() + "状态为关闭,不执行抓取!");
                continue;
            }
            //新线程丢给单独的线程来处理抓取
            Thread one_thread = new Thread(() -> {
                GetOneGame one_get = new GetOneGame(value);
                one_get.Start();
            });
            one_thread.setName("get_" + key);
            one_thread.start();
        }
    }
}
